package com.nuo.common.core.domain;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;
import java.util.Map;

/**
 * Canal 消息监听消息对象
 *
 * @author LGC
 */
@NoArgsConstructor
@Data
public class CanalMessage<T> {
    /**
     * 数据库操作类型
     */
    @JsonProperty("type")
    private String type;
    /**
     * 数据库名
     */
    @JsonProperty("database")
    private String database;
    /**
     * 表名
     */
    @JsonProperty("table")
    private String table;
    /**
     * 改变之后的数据
     */
    @JsonProperty("data")
    private List<T> data;

    /**
     * 未修改前字段的值，与data列表一一对应
     */
    @JsonProperty("old")
    private List<T> old;

    /**
     * 数据表结构
     */
    @JsonProperty("mysqlType")
    private List<Map<String, Object>> mysqlType;


    /**
     * sqlType
     */
    @JsonProperty("sqlType")
    private List<Map<String, Object>> sqlType;

    /**
     * 是否是ddl语句
     */
    @JsonProperty("isDdl")
    private Boolean isDdl;

    /**
     * pk主键字段名
     */
    @JsonProperty("pkNames")
    private List<String> pkNames;
    /**
     * sql
     */
    @JsonProperty("sql")
    private String sql;
    /**
     * 操作执行当前时间，单位：ms
     */
    @JsonProperty("ts")
    private Long ts;

    /**
     * binlog executeTime，单位：ms
     */
    @JsonProperty("es")
    private Long es;

    /**
     * batch_id 处理ID
     */
    @JsonProperty("id")
    private Integer id;
}
